package initialization

import (
	"fmt"
	"ginweb-admin/global"
	"github.com/fsnotify/fsnotify"
	"github.com/spf13/viper"
	"os"
)

/**
 * @Author kong
 * @Date 2023/12/19
 * @Description 初始化config.yaml配置文件解析
 */

func InitViper() {
	// 获取项目路径
	path, err := os.Getwd()
	if err != nil {
		panic(err)
	}

	// 创建配置文件解析对象
	config := viper.New()
	// 获取配置文件路径
	config.AddConfigPath(path + "/conf")
	// 设置配置文件名字
	config.SetConfigName("config")
	// 设置配置文件类型
	config.SetConfigType("yaml")
	// 读取配置文件信息
	if err := config.ReadInConfig(); err != nil {
		panic(err)
	}

	// 把读取的信息放到结构体中
	if err := config.Unmarshal(&global.Config); err != nil {
		fmt.Println(err)
	}

	// 监听配置文件
	config.WatchConfig()
	// 监听配置文件是否改变
	config.OnConfigChange(func(e fsnotify.Event) {
		fmt.Println("config file changed:", e.Name)
		// 监听配置文件，重新刷新结构体的值
		if err := config.Unmarshal(&global.Config); err != nil {
			fmt.Println(err)
		}
	})

}
